//接口文件

const request = require('request-promise');
const base = 'https://api.weixin.qq.com/cgi-bin/';
const api = {
    accessToken: base + 'token?grant_type=client_credential',
}


module.exports = class Wechat {
    constructor(opts) {
        this.opts = Object.assign({}, opts);
        this.appID = opts.appID;
        this.appSecret = opts.appSecret;

        this.fetchAccessToken()
    }
    //发送的方法
    async request(options) {
        options = Object.assign({}, options, { json: true });

        try {
            //request-promise 是请求的 库
            const res = await request(options);
            return res
        } catch (err) {
            console.log(err)
        }
    }
    //获取token 的方法
    async fetchAccessToken() {
        let data;
        if (this.getAccessToken) {
            data = await this.getAccessToken()
        }
        //验证token是否合法  不合法就重新获取
        if (!this.isValidToken(data)) {
            data = await this.updateAccessToken();
        }
    }
    //刷新token 的方法
    async updateAccessToken() {
        const url = `${api.accessToken}&appid=${this.appID}&secret=${this.appSecret}`;
        console.log(url)
        const data = await this.request({ url });
        const now = new Date().getTime();
        const expiresIn = now + (data.expires_in -20) * 1000;

        data.expires_in = expiresIn
        console.log(data)
        return data;
    }
    //token 是否合法的一个判断
    isValidToken(data) {
        //判断data 是否为空  data 上面是否有这个 expires_in 
        if(!data || !data.expires_in){
            return false;
        }

        const expiresIn =data.expires_in;
        const now = new Date().getTime();

        //如果当前时间小于 即将失效的时间 
        if(now < expiresIn) return true;
        else return false
    }


}

















